import Vue from 'vue';
import axios from 'axios';
// eslint-disable-next-line import/no-cycle
import store from '@/store';
import VueAxios from './axios';
import { ACCESS_TOKEN } from '@/store/mutation-types';

// 创建 axios 实例
const service = axios.create({
  baseURL: '/api', // api base_url
  timeout: 6000, // 请求超时时间
});

const err = (error) => {
  if (error.response) {
    const { data } = error.response;
    const token = Vue.ls.get(ACCESS_TOKEN);
    if (error.response.status === 403) {
      console.log(error.response.status);
    }
    if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
      console.log(error.response.status);
      if (token) {
        store.dispatch('Logout').then(() => {
          setTimeout(() => {
            window.location.reload();
          }, 1500);
        });
      }
    }
  }
  return Promise.reject(error);
};

// request interceptor
service.interceptors.request.use((config) => {
  const token = Vue.ls.get(ACCESS_TOKEN);
  if (token) {
    // eslint-disable-next-line no-param-reassign
    config.headers['Access-Token'] = token; // 让每个请求携带自定义 token 请根据实际情况自行修改
  }
  return config;
}, err);

// response interceptor
service.interceptors.response.use(response => response.data, err);

const installer = {
  vm: {},

  // eslint-disable-next-line no-shadow
  install(Vue) {
    Vue.use(VueAxios, service);
  },
};

export { installer as VueAxios, service as axios };
